package models

import (
	"time"
)

// SysRole 系统角色表
type SysRole struct {
	ID          int64      `json:"id" gorm:"primarykey;comment:主键"`
	ParentID    *int64     `json:"parent_id" gorm:"comment:父角色ID"`
	RoleName    string     `json:"role_name" gorm:"not null;size:50;comment:角色名称"`
	RoleCode    string     `json:"role_code" gorm:"uniqueIndex;not null;size:50;comment:角色编码"`
	Description string     `json:"description" gorm:"size:200;comment:角色描述"`
	Status      int        `json:"status" gorm:"not null;default:1;comment:状态：1=启用，0=禁用"`
	Sort        int        `json:"sort" gorm:"not null;default:0;comment:排序"`
	Left        int        `json:"left" gorm:"not null;default:0;comment:左值"`
	Right       int        `json:"right" gorm:"not null;default:0;comment:右值"`
	Level       int        `json:"level" gorm:"not null;default:1;comment:层级"`
	CreatedAt   time.Time  `json:"created_at" gorm:"not null;default:CURRENT_TIMESTAMP;comment:创建时间"`
	UpdatedAt   time.Time  `json:"updated_at" gorm:"not null;default:CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;comment:更新时间"`
	DeletedAt   *time.Time `json:"deleted_at" gorm:"comment:删除时间"`
}

// TableName 指定表名
func (SysRole) TableName() string {
	return "sys_roles"
}

// GetID 实现 MPTTNode 接口
func (r *SysRole) GetID() int64 {
	return r.ID
}

// GetParentID 实现 MPTTNode 接口
func (r *SysRole) GetParentID() *int64 {
	return r.ParentID
}

// GetLeft 实现 MPTTNode 接口
func (r *SysRole) GetLeft() int {
	return r.Left
}

// GetRight 实现 MPTTNode 接口
func (r *SysRole) GetRight() int {
	return r.Right
}

// GetLevel 实现 MPTTNode 接口
func (r *SysRole) GetLevel() int {
	return r.Level
}

// SetLeft 实现 MPTTNode 接口
func (r *SysRole) SetLeft(left int) {
	r.Left = left
}

// SetRight 实现 MPTTNode 接口
func (r *SysRole) SetRight(right int) {
	r.Right = right
}

// SetLevel 实现 MPTTNode 接口
func (r *SysRole) SetLevel(level int) {
	r.Level = level
}

// SysRolePermission 角色权限关联表
type SysRolePermission struct {
	RoleID       int64 `json:"role_id" gorm:"primarykey;comment:角色ID"`
	PermissionID int64 `json:"permission_id" gorm:"primarykey;comment:权限ID"`
}

// TableName 指定表名
func (SysRolePermission) TableName() string {
	return "sys_role_permissions"
}
